package lv.clientedisqueria.view.musico;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import lv.clientedisqueria.controller.Controller;
import lv.clientedisqueria.controller.musico.MusicoController;
import lv.clientedisqueria.model.musico.MusicoModel;
import lv.clientedisqueria.view.AbstractPanel;
import lv.mensajeriadisqueria.idomain.IMusico;

public class MusicoPanel extends AbstractPanel<IMusico>{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private final Controller<IMusico> musicoController;
	
	private JTextField nombreTF, nacionalidadTF;//, vivoTF;
	private JLabel nombreLbl, nacionalidad, vivo;
	private JCheckBox vivoCHK;
	private JPanel textFieldsPanel;
	private JScrollPane scrollPane;
	private JTable musicoTabla;
	
	public MusicoPanel(final MusicoModel musicoModel) {
		super(musicoModel);
		musicoController= new MusicoController(musicoModel);
		musicoController.addObserver(this);
		iniciarVista();
	}
	
	private void iniciarVista() {
		setLayout(new BorderLayout());
		add(new MusicoMenuBoton(musicoController), BorderLayout.NORTH);
		
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(getTextFieldsPanel(), BorderLayout.NORTH);
		
		panel.add(getScrollPane(), BorderLayout.CENTER);
		add(panel, BorderLayout.CENTER);	
	}

	public JScrollPane getScrollPane() {
		if(scrollPane == null) {
			scrollPane = new JScrollPane(getMusicoTabla());
			scrollPane.setAutoscrolls(true);
		}
		return scrollPane;
	}
	
	private JTable getMusicoTabla() {
		if (musicoTabla == null) {
			musicoTabla = new JTable(musicoController.getModelo().getTablaModel());
			musicoTabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			musicoTabla.setSelectionModel(musicoController.getModelo().getTablaModel().getListSelectionModel());
		}
		return musicoTabla;
	}

	public JTextField getNombreTF() {
		if(nombreTF == null) {
			nombreTF = new JTextField();
			nombreTF.setEnabled(false);
		}
		return nombreTF;
	}

	public JTextField getNacionalidadTF() {
		if(nacionalidadTF == null) {
			nacionalidadTF = new JTextField();
			nacionalidadTF.setEnabled(false);
		}
		return nacionalidadTF;
	}

	public JCheckBox getVivoCHK() {
		if(vivoCHK == null) {
			vivoCHK= new JCheckBox();
			vivoCHK.setEnabled(false);
		}
		return vivoCHK;
	}
	
	public JLabel getNacionalidad() {
		if(nacionalidad == null){
			nacionalidad = new JLabel("Nacionalidad");
		}
		return nacionalidad;
	}

	public JLabel getVivo() {
		if(vivo == null){
			vivo = new JLabel("vivo");
		}
		return vivo;
	}

	public JLabel getNombreLbl() {
		if(nombreLbl == null) {
			nombreLbl = new JLabel("Nombre");
		}
		return nombreLbl;
	}

	public JPanel getTextFieldsPanel() {
		if(textFieldsPanel == null){
			textFieldsPanel = new JPanel(new GridLayout(4, 3));//VER SI NO TENGO QUE MODIFICAR EL LAYOUT
			textFieldsPanel.add(getNombreLbl());
			textFieldsPanel.add(getNombreTF());
			textFieldsPanel.add(getNacionalidad());
			textFieldsPanel.add(getNacionalidadTF());
			textFieldsPanel.add(getVivo());
			textFieldsPanel.add(getVivoCHK());
			textFieldsPanel.validate();
			IMusico musico = musicoController.getModelo().getTablaModel().getSeleccionado();
			if (musico!= null) {
				actualizarCampos(musico);
			}
		}
		return textFieldsPanel;
	}

	@Override
	protected void actualizarCampos(IMusico musico) {
		getNombreTF().setText(musico.getNombre());
		getNacionalidadTF().setText(musico.getNacionalidad());
		getVivoCHK().setSelected(musico.getVivo());
		MusicoPanel.this.repaint();
	}
	
	@Override
	protected IMusico actualizarDomain(IMusico musico) {
		musico.setNombre(getNombreTF().getText());
		musico.setNacionalidad(getNacionalidadTF().getText());
		musico.setVivo(vivoCHK.isSelected());
		return musico;
	}	
	
	@Override
	protected void actualizarTabla() {
		musicoTabla.updateUI();
	}
	
	@Override
	protected void iniciarCampos() {
		nombreTF.setText("");
		nacionalidadTF.setText("");
		vivoCHK.setEnabled(true);
		vivoCHK.setSelected(false);
	}
	
	public void habilitarTextField(boolean habilitar) {
		nombreTF.setEnabled(habilitar);
		nacionalidadTF.setEnabled(habilitar);
		vivoCHK.setEnabled(habilitar);
	}

	@Override
	protected Controller<IMusico> getController() {
		return musicoController;
	}

}